/**
 * 
 */
package com.proyecto.personas.modelo.servicio;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;
import com.proyecto.personas.modelo.dto.Direcciones;
import com.proyecto.personas.modelo.dto.TelefonoCorreo;
import com.proyecto.personas.modelo.dto.TelefonoCorreoId;

/**
 * @author javaOne
 *
 */
public class ServicioTelefonoCorreoDinamic extends ServicioGenerico {

	/**
	 * 
	 */
	public ServicioTelefonoCorreoDinamic() {
		// TODO Auto-generated constructor stub
	}

	
	@Override

	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		try {
			System.out.println("entro a incluir...");
			TelefonoCorreo objTelefonoCorreo = (TelefonoCorreo) pojo;
			super.incluir(objTelefonoCorreo, iniciaTransaccion);	
			
		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			System.err.println(":::ServicioPersonas::: " + e.getMessage());
			if("advertencia.persona.correlativo.persona.modificar.BloqueoOptimista".equals(e.getMessage())){
				throw new GeneralException(	e.getMessage());
			}else{
				throw new GeneralException(
						"error." + claveProperties + ".desconocido");
			}
			
		}
		
	}


	public void almacenarListaTelefonos(List<TelefonoCorreo> listTelefonoCorreo){
		
		if(listTelefonoCorreo.size() == 0){
			
		}else{
			TelefonoCorreo objTelefonoCorreo = new TelefonoCorreo();
			boolean error = false;
			for(int i = 0; i < listTelefonoCorreo.size() ; i++){
				try {
					this.consultar(new TelefonoCorreoId(listTelefonoCorreo.get(i).getId().getCiaopr(),
							listTelefonoCorreo.get(i).getId().getNropersona(),
							listTelefonoCorreo.get(i).getId().getTelefonotipcod(),
							listTelefonoCorreo.get(i).getId().getTelefonocodigopais(),
							//listTelefonoCorreo.get(i).getId().getTelefonocodigoarea(),
							listTelefonoCorreo.get(i).getId().getTelefononumero()
							));		
					System.out.println("no se almacenara telefono");
					error = true;
				} catch (Exception e) {
					// TODO: handle exception

					objTelefonoCorreo.getId().setCiaopr( listTelefonoCorreo.get(i).getId().getCiaopr() );
					objTelefonoCorreo.getId().setNropersona( listTelefonoCorreo.get(i).getId().getNropersona() );
					objTelefonoCorreo.getId().setTelefonotipcod( listTelefonoCorreo.get(i).getId().getTelefonotipcod() );
					objTelefonoCorreo.getId().setTelefonocodigopais( listTelefonoCorreo.get(i).getId().getTelefonocodigopais() );
					//objTelefonoCorreo.getId().setTelefonocodigoarea( listTelefonoCorreo.get(i).getId().getTelefonocodigoarea() );
					objTelefonoCorreo.getId().setTelefononumero( listTelefonoCorreo.get(i).getId().getTelefononumero() );
					error = false;
				}
				try {
					if(error){
						
					}else{
						this.incluir(objTelefonoCorreo, true);	
					}
						
				} catch (Exception e) {
					// TODO: handle exception
					System.out.println("almacenarListaTelefonos.incluir" + e.getMessage());
				}
			}
			
		}
 	}
	

	public List<TelefonoCorreo> buscarObjTelefonoCorreo(Integer nropersona){
		List<TelefonoCorreo> listTelefonoCorreo = null;
		
		String query = "FROM TelefonoCorreo tel " +
						" WHERE tel.id.nropersona = " + nropersona;


		try {
			listTelefonoCorreo = propiedadDAO.ejecutarQueryConsulta(query, null);	
		} catch (Exception e) {
			// 		TODO: handle exception
			listTelefonoCorreo = new ArrayList<TelefonoCorreo>();
		}
		
		return listTelefonoCorreo;
	}
	
}
